package paint;

/**
 * Tests unitaires sur le projet Paint<br>
 * @author Romain Bustos
 * @author Matthieu Perrin
 * @version 1.0
 */
public class UnitTest {
    
    public static void main(String[] args){
        
     /* 
     * ********************************************************
     * 
     *        DEBUT Teste Unitaire sur la classe Point
     * 
     * ********************************************************
     */
        System.out.println("************************ \n");
        System.out.println("Test sur la classe Point \n");
        System.out.println("************************ \n");
        // Test de création d'un Point par defaut
        Point p1 = new Point();
        if (p1!= null) 
            System.out.println("Methode new() --> OK \n");
        else 
            System.out.println("Methode new() --> NOK \n");
        
        //Test de création d'un point de surcharge
        Point p2 = new Point(2,3,p1);
        if (p2!= null)
            System.out.println("Methode new Point(2,3,p1) --> OK \n");
        else 
            System.out.println("Methode new Point(2,3,p1) --> NOK \n");
        
        //Test de création d'un point clone de P2 
        Point pc2 = p2.createClone();
        if (pc2.equals(p2) == true)
            System.out.println("Methode CreateClonePoint() --> OK \n");
        else{
            System.out.println("Methode CreateClonePoint() --> NOK");
            System.out.println("P2 --> " +p2.toString());
            System.out.println("PC2 --> " +p2.toString() +"\n");
            }
         
        // Test de création d'un point Sysmétique par rapport à l'origine
        Point pso1 = p1.createSymetrieO();
        if ((pso1.getX() == -p1.getX()) && (pso1.getY() == -p1.getY()) && (pso1.getO() == p1.getO()))
            System.out.println("Methode createSymetrieO()  --> OK \n");
        else 
            System.out.println("Methode createSymetrieO()  --> NOK \n");
        
        // Test de création d'un point Sysmétique par rapport à X
        Point psx1 = p1.createSymetrieX();
        if ((psx1.getX() == p1.getX()) && (psx1.getY() == -p1.getY()) && (psx1.getO() == p1.getO()))
            System.out.println("Methode createSymetrieX()  --> OK \n");
        else 
            System.out.println("Methode createSymetrieX()  --> NOK \n");
        
        // Test de création d'un point Sysmétique par rapport à X
        Point psy1 = p1.createSymetrieY();
        if ((psy1.getX() == -p1.getX()) && (psy1.getY() == p1.getY()) && (psy1.getO() == p1.getO()))
            System.out.println("Methode createSymetrieY()  --> OK \n");
        else 
            System.out.println("Methode createSymetrieY()  --> NOK \n");
        
        // Test de distance()
        Point psx2 = p2.createSymetrieX();
        if (p1.distance(p2) == psx1.distance(psx2))
            System.out.println("Methode distance()  --> OK \n");
        else
            System.out.println("Methode distance()  --> NOK \n");
        
        //Test de toString()
        System.out.println("Methode toString sur P2  --> " + p2.toString());
        
    /* 
     * ********************************************************
     * 
     *        FIN Teste Unitaire sur la classe Point
     * 
     * ********************************************************
     */
     
     
     /* 
     * ********************************************************
     * 
     *        DEBUT Teste Unitaire sur la classe Segment
     * 
     * ********************************************************
     */
        
        System.out.println("\n************************ \n");
        System.out.println("Test sur la classe Segment \n");
        System.out.println("************************ \n");
      // Test de création d'un Segment par defaut
        Segment s1 = new Segment();
        if (s1!= null) 
            System.out.println("Methode new Segment() --> OK \n");
        else 
            System.out.println("Methode new Segment() --> NOK \n");
        
        //Test de création d'un segment de surcharge
        Segment s2 = new Segment(new Point(2,2), new Point(4,4));
        if (s2!= null)
            System.out.println("Methode Segment(new Point(), new Point() --> OK \n");
        else 
            System.out.println("Methode Segment(new Point(), new Point() --> NOK \n");
        
        //Test de création d'un Segment clone de S2 
        Segment sc2 = s2.createClone();
        if (sc2.equals(s2) == true)
            System.out.println("Methode CreateClone() --> OK \n");
        else{
            System.out.println("Methode CreateClone() --> NOK");
            System.out.println("S2 --> " +s2.toString());
            System.out.println("SC2 --> " +sc2.toString() +"\n");
            }
         
        // Test de création d'un Segment sysmétique par rapport à l'origine
        Segment sso1 = s1.createSymetrieO();
        if ((sso1.getA().isSymetrieO(s1.getA()) && (sso1.getB().isSymetrieO(s1.getB()))))
            System.out.println("Methode createSymetrieO()  --> OK \n");
        else 
            System.out.println("Methode createSymetrieO()  --> NOK \n");
        
        // Test de création d'un point Sysmétique par rapport à X
        Segment ssx1 = s1.createSymetrieX();
        if ((ssx1.getA().isSymetrieX(s1.getA()) && (ssx1.getB().isSymetrieX(s1.getB()))))
            System.out.println("Methode createSymetrieX()  --> OK \n");
        else 
            System.out.println("Methode createSymetrieX()  --> NOK \n");
        
        // Test de création d'un point Sysmétique par rapport à Y
        Segment ssy1 = s1.createSymetrieY();
        if ((ssy1.getA().isSymetrieY(s1.getA()) && (ssy1.getB().isSymetrieY(s1.getB()))))
            System.out.println("Methode createSymetrieY()  --> OK \n");
        else 
            System.out.println("Methode createSymetrieY()  --> NOK \n");
        
        // Test de distance()
        if (s2.distance() == java.lang.Math.sqrt(8))
            System.out.println("Methode distance()  --> OK \n");
        else
            System.out.println("Methode distance()  --> NOK \n");
        
        //Test de toString()
        System.out.println("Methode toString sur S2  --> " + s2.toString()); 
        
    /* 
     * ********************************************************
     * 
     *        FIN Teste Unitaire sur la classe Segment
     * 
     * ********************************************************
     */
        
        
        
         /* 
     * ********************************************************
     * 
     *        DEBUT Teste Unitaire sur la classe Rectangle
     * 
     * ********************************************************
     */
       
        System.out.println("\n************************ \n");
        System.out.println("Test sur la classe Rectangle \n");
        System.out.println("************************ \n");
      // Test de création d'un Rectangle par defaut
        Rectangle r1 = new Rectangle();
        if (r1!= null) 
            System.out.println("Methode new Rectangle() --> OK \n");
        else 
            System.out.println("Methode new Rectangle() --> NOK \n");
        
        //Test de création d'un Rectangle de surcharge
        Rectangle r2 = new Rectangle(new Point(2,2), new Point(4,4));
        if (r2!= null)
            System.out.println("Methode Rectangle(new Point(2,2), new Point(4,4) --> OK \n");
        else 
            System.out.println("Methode Rectangle(new Point(2,2), new Point(4,4) --> NOK \n");
        
        //Test de création d'un Rectangle clone de R2 
        Rectangle rc2 = r2.createClone();
        if (rc2.equals(r2) == true)
            System.out.println("Methode createCloneRectangle() --> OK \n");
        else{
            System.out.println("Methode createCloneRectangle() --> NOK");
            System.out.println("R2 --> " +r2.toString());
            System.out.println("RC2 --> " +rc2.toString() +"\n");
            }
        
        //Test de toString()
        System.out.println("Methode toString sur R2  --> " + r2.toString());  
        
        
      /* 
     * ********************************************************
     * 
     *        FIN Teste Unitaire sur la classe Rectangle
     * 
     * ********************************************************
     */
    }
}
